package com.kun.rental.utils;

import com.kun.rental.entity.Permission;
import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class PermissionTreeUtils {


    /**
     * 构建权限菜单树结构。
     * 根据权限列表和父权限ID，构建一个树形结构的权限列表，每个权限包含其子权限。
     *
     * @param permissionList 权限列表，包含所有权限信息。
     * @param pid 父权限ID，用于筛选出指定父权限下的所有子权限。
     * @return 构建好的树形结构权限列表。
     */
    public static List<Permission> buildMenuTree(List<Permission> permissionList, int pid) {
        List<Permission> treeList = new ArrayList<>();
        // 从权限列表中筛选出父权限ID为指定值的权限
        Optional.ofNullable(permissionList).orElse(new ArrayList<>())
                .stream()
                .filter(permission -> permission != null && permission.getPid() == pid)
                .forEach(permission -> {
                    Permission permission1 = new Permission();
                    // 复制当前权限的信息到一个新的权限对象中
                    BeanUtils.copyProperties(permission, permission1);
                    // 递归构建当前权限的子权限树
                    permission1.setChildren(buildMenuTree(permissionList, permission.getId()));
                    treeList.add(permission1);
                });
        return treeList;
    }

}
